#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
using namespace std;

//vector<int> path;
//vector<vector<int>> ret;
//bool check[10];
//void dfs(int num)
//{
//	num = 0;
//	if (path.size() == 3)
//	{
//		if (path[0] * 2 == path[1] && path[0] * 3 == path[2])
//		{
//			ret.push_back(path);
//			return;
//		}
//	}
//	
//	for (int i = 1; i <= 9; i++)
//	{
//		if (!check[i])
//		{
//			num = num * 10 + i;
//			check[i] = true;
//			if (num >= 100)
//			{
//				path.push_back(num);
//				dfs(num);
//				path.pop_back();
//				check[i] = false;
//			}
//
//			
//		}
//	}
//}
//int main()
//{
//	dfs(0);
//	for (int i = 0; i < ret.size(); i++)
//	{
//		for (int j = 0; j < ret[i].size(); j++)
//		{
//			cout << ret[i][j] << " ";
//		}
//		cout << endl;
//	}
//	return 0;
//}

vector<int> path;
vector<vector<int>> ret;
bool check[10];

void dfs()
{
	if (path.size() == 9)
	{
		int a = path[0] + path[1] * 10 + path[2] * 100;
		int b = path[3] + path[4] * 10 + path[5] * 100;
		int c = path[6] + path[7] * 10 + path[8] * 100;
		if (a * 2 == b && a * 3 == c)
		{
			ret.push_back({ a, b, c });
			return;
		}
	}
	for (int i = 1; i <= 9; i++)
	{
		if (!check[i])
		{
			path.push_back(i);
			check[i] = true;
			dfs();
			path.pop_back();
			check[i] = false;
		}
	}
}
int main()
{
	dfs();
	for (int i = 0; i < ret.size(); i++)
	{
		for (int j = 0; j < ret[i].size(); j++)
		{
			cout << ret[i][j] << " ";
		}
		cout << endl;
	}
	return 0;
}
